TWebBrowser a nove okno v MDI apl.

Otázka od: Daňa Petr

11. 11. 2002 9:31

Zdravim,
mam MDI aplikaci, kde jsou child okna s komponentou TWebBrowser. Pokud se ma
otevrit nove okno IE (treba pri shift-click na odkaz), jsem schopen to poznat v
udalosti NewWindow2. Pak mohu otevrit nove child okno misto toho, aby se
pustilo samotne IE. Problem je v tom, jak tomu novemu oknu dat vedet, co ma
vlastne otevrit. NewWindow2 ma v podstate akorat parametr
"var ppDisp: IDispatch". Predpokladam, ze v tom novem okne bude nejlepsi
zavolat funkci Navigate, ale jak uz jsem psal, nemam data pro jeji parametry.
Muzete mi nekdo poradit, jak to tedy udelat?

Diky

Peca

Odpovedá: ing. Jan Fiala

11. 11. 2002 9:40

A nestaci udalost OnNavigate ?

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

11.11.2002 Daňa Petr:
> Zdravim,
> mam MDI aplikaci, kde jsou child okna s komponentou TWebBrowser. Pokud se ma
otevrit nove okno IE (treba pri shift-click na odkaz), jsem schopen to poznat v
udalosti NewWindow2. Pak mohu otevrit
> nove child okno misto toho, aby se pustilo samotne IE. Problem je v tom, jak
tomu novemu oknu dat vedet, co ma vlastne otevrit. NewWindow2 ma v podstate
akorat parametr "var ppDisp: IDispatch".
> Predpokladam, ze v tom novem okne bude nejlepsi zavolat funkci Navigate, ale
jak uz jsem psal, nemam data pro jeji parametry.
> Muzete mi nekdo poradit, jak to tedy udelat?

Odpovedá: Daňa Petr

11. 11. 2002 10:31

Je tam jen OnNavigateComplete, ale to mi nepomuze. Prvni se zavola ta udalost
OnNewWindow, ve ktere musim zakazat otevreni samostatneho okna IE a vytvorit
vlastni child okno, ale pak uz se dal nehnu ...

>
> A nestaci udalost OnNavigate ?
>

> > Zdravim,
> > mam MDI aplikaci, kde jsou child okna s komponentou
> TWebBrowser. Pokud se ma otevrit nove okno IE (treba pri
> shift-click na odkaz), jsem schopen to poznat v udalosti
> NewWindow2. Pak mohu otevrit
> > nove child okno misto toho, aby se pustilo samotne IE.
> Problem je v tom, jak tomu novemu oknu dat vedet, co ma
> vlastne otevrit. NewWindow2 ma v podstate akorat parametr
> "var ppDisp: IDispatch".
> > Predpokladam, ze v tom novem okne bude nejlepsi zavolat
> funkci Navigate, ale jak uz jsem psal, nemam data pro jeji parametry.
> > Muzete mi nekdo poradit, jak to tedy udelat?
>

Odpovedá: Ales Vasicek

11. 11. 2002 10:25

Ahoj,

pouzij udalost BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);

v te si schovej do nejake promenne URL a v nove vytvorenem okne pomoci
Navigate zase prirad.

A.

> -----Original Message-----
> From: Daňa Petr [mailto:Petr.Dana@pvt.cz]
>
> Je tam jen OnNavigateComplete, ale to mi nepomuze. Prvni se
> zavola ta udalost OnNewWindow, ve ktere musim zakazat
> otevreni samostatneho okna IE a vytvorit vlastni child okno,
> ale pak uz se dal nehnu ...

Odpovedá: Ondrej Kelle

11. 11. 2002 10:54

>>> mam MDI aplikaci, kde jsou child okna s komponentou
>>> TWebBrowser. Pokud se ma otevrit nove okno IE (treba pri
>>> shift-click na odkaz), jsem schopen to poznat v udalosti
>>> NewWindow2. Pak mohu otevrit
>>> nove child okno misto toho, aby se pustilo samotne IE.
>>> Problem je v tom, jak tomu novemu oknu dat vedet, co ma
>>> vlastne otevrit. NewWindow2 ma v podstate akorat parametr
>>> "var ppDisp: IDispatch".

>> A nestaci udalost OnNavigate ?

> Je tam jen OnNavigateComplete, ale to mi nepomuze. Prvni se
> zavola ta udalost OnNewWindow, ve ktere musim zakazat
> otevreni samostatneho okna IE a vytvorit vlastni child okno,
> ale pak uz se dal nehnu ...

V evente OnNewWindow2 si vytvor novy MDI child form a do var ppDisp vrat
jeho web browser:

procedure TMainForm.WebBrowser1NewWindow2(Sender: TObject; var ppDisp:
IDispatch; var Cancel: WordBool);
var
  NewChild: TChildForm;
begin
  Cancel := False;
  NewChild := CreateNewChild; // funkcia, ktora vrati novu instanciu MDI
child formulara
  try
    ppDisp := NewChild.WebBrowser1.DefaultInterface as IDispatch;
  except
    NewChild.Free;
    Cancel := True;
    raise;
  end;
end;

Ak mas vo vytvoreni toho child formu priradeny event handler na
OnBeforeNavigate2 tak ten by sa mal v novom okne zavolat automaticky.

HTH
TOndrej

Odpovedá: Daňa Petr

11. 11. 2002 12:54

Super, diky, to je presne ono.

> V evente OnNewWindow2 si vytvor novy MDI child form a do var
> ppDisp vrat
> jeho web browser:
>
> procedure TMainForm.WebBrowser1NewWindow2(Sender: TObject; var ppDisp:
> IDispatch; var Cancel: WordBool);
> var
> NewChild: TChildForm;
> begin
> Cancel := False;
> NewChild := CreateNewChild; // funkcia, ktora vrati novu
> instanciu MDI
> child formulara
> try
> ppDisp := NewChild.WebBrowser1.DefaultInterface as IDispatch;
> except
> NewChild.Free;
> Cancel := True;
> raise;
> end;
> end;
>